# 通过线性回归对GDP进行预测
import json

import pandas as pd
from sklearn.linear_model import LinearRegression
from dao.writeToFile import writeToFile
from pyeCharts.pyeCharts import pyeCharts


class LinearRegressionAnalysisForDevelopment:
    def __init__(self):
        pass

    # 对各省份的GDP进行线性回归分析 预测未来五年的GDP走向
    @staticmethod
    def linearRegressionAnalysisForDevelopment():
        # 获取数据
        data = pd.read_excel('Excel\\各地区近10年发展指数.xlsx', index_col=0)

        year_list = list(data.columns)
        year_list.extend(['2023', '2024', '2025', '2026', '2027'])
        data_dict = {}

        # 线性回归分析
        # 获取省份列表
        provinces = list(data.index)

        # 创建线性回归模型
        model = LinearRegression()

        # 遍历每个省份进行线性回归处理
        for province in provinces:
            # 提取年份和GDP数据
            years = data.columns.values.reshape(-1, 1)  # 将年份转换为二维数组
            gdp = data.loc[province].values

            # 训练模型
            model.fit(years, gdp)

            k = model.coef_[0]  # 斜率
            b = model.intercept_  # 截距

            # 处理线性回归p数据
            gdp_data_list = []
            for year in year_list:
                gdp = round(k * int(year) + b, 2)
                gdp_data_list.append(gdp)
            data_dict[province] = gdp_data_list

        gdp_data = pd.DataFrame(data_dict, index=year_list).T
        filename = '各地区发展指数线性回归统计数据'
        writeToFile().writeDataForCommonToExcel(gdp_data, filename)  # 写入文件
        pyeCharts.drawLineForFutureGDP(gdp_data)  # 生成图表

